home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-05 / rje.zip / RJE.C < prev    next >
Text File  |  1992-11-28  |  7KB  |  170 lines

  1. /* ************************************************************************* */
  2. /* RJE - Remote Job Entry Facility for peer-to-peer networks                 */
  3. /*                                                                           */
  4. /* For use with Douglas Boling's REDD utility (from PC magazine)             */
  5. /*                                                                           */
  6. /* Usage:  RJE [-s control file] | <command> <parameters...>                 */
  7. /*                                                                           */
  8. /*         if -s option is used, then "control file" is a standard batch     */
  9. /*         file. Otherwise rje expects a single command with optional        */
  10. /*         parameters.                                                       */
  11. /*                                                                           */
  12. /* Notes and Caveats:                                                        */
  13. /*                                                                           */
  14. /* This code was compiled using Borland's Turbo C++ V1.0. It will not        */
  15. /* compile with MS C 5.1 unless you supply an equivalent for the "delay"     */
  16. /* function (it ain't hard, but I'll leave it as an exercise for you).       */
  17. /*                                                                           */
  18. /* A guiding paradigm here is the notion that the network will contain one   */
  19. /* one servers, which don't get used for anything but RJE and LAN file       */
  20. /* transactions. It would be unnerving for someone using the server to       */
  21. /* suddenly see a "mystery command" appear out of nowhere - especially in    */
  22. /* the middle of a word processing session. Upshot: dedicate a server.       */
  23. /*                                                                           */
  24. /* rje expects to find an environment variable in the workstations global    */
  25. /* exvironment space called "rje", which contains the REDD network drive     */
  26. /* letter in the form <drive>:                                               */
  27. /*                                                                           */
  28. /* Note that the trailing colon is not optional; rje will whine about it if  */
  29. /* it is not supplied.                                                       */
  30. /*                                                                           */
  31. /* rje will not overwrite an existing REDD keyboard.in control file. It will */
  32. /* retry the operation for a few seconds before giving up. This allows for   */
  33. /* multiple users to gain access to the REDD facility.                       */
  34. /*                                                                           */
  35. /* Some replacement ANSI screen drivers seem to cause REDD some grief. Use   */
  36. /* the orginal PC/MS-DOS ANSI.SYS on your server, or use nothing at all      */
  37. /* (after all, it's a server, right?)                                        */
  38. /*                                                                           */
  39. /* This code is not elegant. Do with it as you will. I don't even want any   */
  40. /* credit for it.                                                            */
  41. /*                                                                           */
  42. /* rje is successfully running on an Artisoft LAN. It has not been tested on */
  43. /* any other network.                                                        */
  44. /*                                                                           */
  45. /* created 11/92 by John M. Hughes - jmh%cerberus.uucp@noao.uucp             */
  46. /*                                   jmh@coyote.datalog.com                  */
  47. /*                                   BIX: jmh                                */
  48. /*                                   Compuserve: 70521,1276                  */
  49. /*                                                                           */
  50. /* p.s. Please don't plague me with bug reports - you have the source code.  */
  51. /* ************************************************************************* */
  52.  
  53. #include <stdio.h>
  54. #include <string.h>
  55. #include <stdlib.h>
  56. #include <dos.h>
  57. #include <sys\stat.h>
  58.  
  59. FILE *src, *targ, *outfile;
  60. char tmp[256];
  61. char rjetarg[33];
  62. struct stat statbuf;
  63. int i;
  64.  
  65.  
  66. void submit(char *subname)
  67. {
  68.   if (stat(subname,&statbuf) != 0) {
  69.      printf("Error - Submit file not found\n");
  70.      exit(1);
  71.      }
  72.  
  73.   if (statbuf.st_size == 0) {
  74.      printf("Error - Empty submit file\n");
  75.      exit(1);
  76.      }
  77.  
  78.   if (stat(rjetarg,&statbuf) == 0) {
  79.      printf("RJE Facility Currently In Use - Retrying...\n");
  80.      i = 0;
  81.      again1:
  82.      if (stat(rjetarg,&statbuf) == 0) {
  83.         delay(500);
  84.         if (i > 10) {
  85.            printf("CANNOT SUBMIT JOB - RJE Facility Busy\n");
  86.            exit(3);
  87.            }
  88.         i++;
  89.         }
  90.      else
  91.         goto again1;
  92.      }
  93.      
  94.   if ((targ = fopen(rjetarg,"w")) == NULL) {
  95.      printf("Error - could not open RJE target\n");
  96.      exit(1);
  97.      }
  98.  
  99.   if ((src = fopen(subname,"r")) == NULL) {
  100.      printf("Error - could not open RJE source\n");
  101.      fclose(targ);
  102.      exit(1);
  103.      }
  104.  
  105.   while (!feof(src))
  106.      if (fgets(tmp,100,src)) fputs(tmp,targ);
  107.  
  108.   fclose(targ);
  109.   fclose(src);
  110.   remove(subname);
  111. }
  112.  
  113.  
  114.  
  115. void main(int argc, char *argv[])
  116. {
  117.   char outname[32] = "rjein.tmp";
  118.  
  119.   if (argc < 2) {
  120.      printf("Error - Invalid Command Line\n\n");
  121.      printf("Usage:  RJE [-s control file] | <command> <parameters...>\n\n");
  122.      exit(1);
  123.      }
  124.  
  125.   if (getenv("RJE")) {
  126.      strcpy(rjetarg,getenv("RJE"));
  127.      if (rjetarg[1] != ':') {
  128.         printf("Error - invalid target drive format in environment\n");
  129.         exit(1);
  130.         }
  131.      strcat(rjetarg,"keyboard.in");
  132.      }
  133.   else {
  134.      printf("Error - RJE target drive not in environment\n");
  135.      exit(1);
  136.      }
  137.  
  138.   if (!strcmp("-s",argv[1]) || !strcmp("-S",argv[1])) {
  139.      if (argc < 3) {
  140.         printf("Error - No submit file specified\n");
  141.         exit(1);
  142.         }
  143.      submit(argv[2]);
  144.      }
  145.   else {
  146.      if ((outfile = fopen(outname,"w")) == NULL) {
  147.         printf("Error - Unable to create RJE control output file\n");
  148.         exit(2);
  149.         }
  150.  
  151.      /* build command string */
  152.      strcpy(tmp,argv[1]);
  153.  
  154.      if (argc >2)
  155.         for (i=2;i<argc;i++) {
  156.            strcat(tmp," ");
  157.            strcat(tmp,argv[i]);
  158.            }
  159.  
  160.      fprintf(outfile,"%s\n",tmp);
  161.      fclose(outfile);
  162.   
  163.      /* send the rje file for execution */
  164.  
  165.      submit(outname);
  166.      }
  167.  
  168.   printf("Job Submitted OK\n");
  169.   exit(0);
  170. }